package com.xbongbong.saas.service;

import com.xbongbong.paas.pojo.dto.FormDataListDTO;
import com.xbongbong.paas.toolbox.exception.XbbException;
import com.xbongbong.pro.contractproduct.pojo.dto.ContractProductDeleteBatchDTO;
import com.xbongbong.pro.contractproduct.pojo.dto.ContractProductListDTO;
import com.xbongbong.pro.contractproduct.pojo.vo.ContractProductDeleteBatchVO;
import com.xbongbong.pro.contractproduct.pojo.vo.ContractProductListVO;
import com.xbongbong.saas.domain.entity.ContractProductEntity;

import java.util.List;
import java.util.Map;

/**
 * 产品合同关联
 * @author 吴峰
 * @version v1.0
 * @date 2019/2/27 21:26
 * @since v1.0
 */
public interface ContractProductService {
    /**
     * 获取待出库产品合同
     * @author 阮思程
     * @date 2021/9/13 09：45
     * @param map
     * @return com.xbongbong.pro.contractproduct.pojo.vo.ContractProductListVO
     * @throws XbbException 业务异常
     */
    List<ContractProductEntity> findWaitOutProductEntitys(Map<String, Object> param) throws XbbException;

    /**
     * 获取待采购产品列表
     */
    List<ContractProductEntity> findWaitPurchaseProductEntitys(FormDataListDTO formDataListDTO) throws XbbException;

    /**
     * 获取待采购产品总数
     */
    Integer findWaitPurchaseProductCount(FormDataListDTO formDataListDTO) throws XbbException;


    /**
     * 获取待入库产品总数
     */
    Integer findWaitOutStockProductCount(Map<String, Object> param) throws XbbException;

    /**
     * 获取产品合同
     * @author 吴峰
     * @date 2019/2/27 21:30
     * @param contractProductListDTO
     * @return com.xbongbong.pro.contractproduct.pojo.vo.ContractProductListVO
     * @throws XbbException 业务异常
     */
    ContractProductListVO findContractProductList(ContractProductListDTO contractProductListDTO) throws XbbException;

    /**
     * 批量删除合同产品
     * @author 吴峰
     * @date 2019/3/13 17:07
     * @param contractProductDeleteBatchDTO
     * @return com.xbongbong.pro.contractproduct.pojo.vo.ContractProductDeleteBatchVO
     * @throws XbbException 业务异常
     */
    ContractProductDeleteBatchVO deleteBatch(ContractProductDeleteBatchDTO contractProductDeleteBatchDTO) throws XbbException;

    /**
     * 数据一致性
     * @author 魏荣杰
     * @date 2019/10/8 16:11
     * @param corpid
     * @param productId
     * @param productName
     * @param productNo
     * @param specification
     * @return void
     * @throws XbbException 业务异常
     */
    void dataConsistencyUpdate(String corpid, Long productId, String productName, String specification, String productNo) throws XbbException;

    /**
     * 更新回滚es
     * @param contractIdIn 合同id
     * @param corpid
     * @throws XbbException
     */
    void updateRollbackByContractId(List<Long> contractIdIn, String corpid) throws XbbException;
    /**
     * 获取记录数量
     * @param param
     * @throws XbbException
     */
    Integer getEntitysCount(Map<String, Object> param);
    /**
     * 根据产品ID,公司ID获取待出库的产品信息（主要获取产品对应待出库数量）
     * @param param
     * @throws XbbException
     */
    List<ContractProductEntity> getWaitOutstockProductByProductIdIn(List<Long> productIdList, String corpid);
    /**
     * 拼接待出库列表参数
     *
     * @param formDataListDTO
     * @return
     * @throws XbbException
     */
    Map<String, Object> getWaitOutStockParam(FormDataListDTO formDataListDTO, List<Long> contractEsIds) throws XbbException;

}
